<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
	<script type="text/javascript">

		/*
		 * JS中为我们提供了三种逻辑运算符
		 * ! 非
		 * 	- !可以用来对一个值进行非运算
		 * 	- 所谓非运算就是值对一个布尔值进行取反操作，
		 * 		true变false，false变true
		 * 	- 如果对一个值进行两次取反，它不会变化
		 * 	- 如果对非布尔值进行元素，则会将其转换为布尔值，然后再取反
		 * 		所以我们可以利用该特点，来将一个其他的数据类型转换为布尔值
		 * 		可以为一个任意数据类型取两次反，来将其转换为布尔值，
		 * 		原理和Boolean()函数一样
		 * 
		 * && 与
		 * 	- &&可以对符号两侧的值进行与运算并返回结果
		 * 	- 运算规则
		 * 		- 两个值中只要有一个值为false就返回false，
		 * 			只有两个值都为true时，才会返回true
		 * 		- JS中的“与”属于短路的与，
		 * 			如果第一个值为false，则不会看第二个值
		 * 
		 * || 或
		 * 	- ||可以对符号两侧的值进行或运算并返回结果
		 * 	- 运算规则：
		 * 		- 两个值中只要有一个true，就返回true
		 * 			如果两个值都为false，才返回false
		 *		- JS中的“或”属于短路的或
		 * 			如果第一个值为true，则不会检查第二个值
		 */

		//如果两个值都是true则返回true
		var result = true && true;

		//只要有一个false，就返回false
		result = true && false;
		result = false && true;
		result = false && false;

		//console.log("result = "+result);

		//第一个值为true，会检查第二个值
		//true && alert("看我出不出来！！");

		//第一个值为false，不会检查第二个值
		//false && alert("看我出不出来！！");

		//两个都是false，则返回false
		result = false || false;

		//只有有一个true，就返回true
		result = true || false;
		result = false || true;
		result = true || true;

		// console.log("result = " + result);

		//第一个值为false，则会检查第二个值
		//false || alert("123");

		//第一个值为true，则不再检查第二个值
		//true || alert("123");



		var a = false;

		//对a进行非运算
		a = !a;

		// console.log("a = " + a);

		var b = 10;
		b = !!b;

		// console.log("b = " + b);
		// console.log(typeof b);

	</script>
</head>

<body>
</body>

</html>